#include <vector.h>
typedef vector<AnsiString>::const_iterator VI_S;
//------------------------------------------------------------------------------------------------
// Удаляет из line все ch
//------------------------------------------------------------------------------------------------
AnsiString clearLine_ch(AnsiString line, char ch)
{
if(ch=='\0'){
return line;
}
AnsiString str=line;
int i=1;
while(i<=str.Length()){
if(str[i]==ch)
str.Delete(i,1);
else
i++;
}
return str;
}
//------------------------------------------------------------------------------------------------
// Удаляет из line все smb[i]
//------------------------------------------------------------------------------------------------
AnsiString clearLine(AnsiString line, AnsiString smb)
{
if(smb.Length()==0){
return line;
}
AnsiString str=line;
for (int i=1;i<=smb.Length();i++){
str=clearLine_ch(str,smb[i]);
}
return str;
}
//------------------------------------------------------------------------------------------------
// Разбивает line на вектор arr по разделителю separator и удаляет все smbNP[i]
// (адаптированый для строк в '' содержащие separator)
//------------------------------------------------------------------------------------------------
bool SplitStr(AnsiString line, vector<AnsiString> & arr, char separator,
AnsiString smbNP, char str_separ, bool clearVec)
{
if(clearVec)
arr.clear();
AnsiString str="",tmp_line=line;;
bool begin=false;
for(int i=1;i<=tmp_line.Length();i++){
if(tmp_line[i]==str_separ){
begin=!begin;
}
if(!begin && tmp_line[i]==separator){
str=clearLine(str,smbNP);
arr.push_back(str);
str="";
continue;
}
str+=tmp_line[i];
}
if(str.Length()>0){
str=clearLine(str,smbNP);
arr.push_back(str);
str="";
}
return true;
}
//------------------------------------------------------------------------------------------------
// Разбивает line на вектор arr по разделителю separator и удаляет все smbNP[i]
//------------------------------------------------------------------------------------------------
bool Split(AnsiString line, vector<AnsiString> & arr, char separator,
AnsiString smbNP, bool clearVec)
{
if(clearVec)
arr.clear();
AnsiString str="",tmp_line=line;
for(int i=1;i<=tmp_line.Length();i++){
if(tmp_line[i]==separator){
str=clearLine(str,smbNP);
arr.push_back(str);
str="";
continue;
}
str+=tmp_line[i];
}
if(str.Length()>0){
str=clearLine(str,smbNP);
arr.push_back(str);
str="";
}
return true;
}
//------------------------------------------------------------------------------------------------
// Заменяет в строке line все fnd_str на repl_str
//------------------------------------------------------------------------------------------------
AnsiString Replace(AnsiString line, AnsiString fnd_str, AnsiString repl_str)
{
AnsiString tmp=line;
int kol=fnd_str.Length();
if(StrPos(tmp.c_str(),fnd_str.c_str()))
{
int ind=tmp.Pos(fnd_str);
tmp.Delete(ind,kol);
tmp.Insert(repl_str,ind);
tmp=Replace(tmp,fnd_str,repl_str);
return tmp;
}else
return tmp;
}
//------------------------------------------------------------------------------------------------
// Удаление из строки всех вхождений beg_str??????end_str
//------------------------------------------------------------------------------------------------
AnsiString DeleteMacros(AnsiString line, AnsiString beg_str, AnsiString end_str)
{
AnsiString tmp=line;
int idx=0,idx2=0;
if((idx=tmp.Pos(beg_str)))
{
AnsiString tmp2=tmp.SubString(idx+beg_str.Length(),tmp.Length());
if((idx2=tmp2.Pos(end_str))){
tmp.Delete(idx,beg_str.Length()+idx2+end_str.Length()-1);
return DeleteMacros(tmp, beg_str, end_str);
}
}
return tmp;
}
//------------------------------------------------------------------------------------------------
// Возвращает первую подстроку, начинающуюся на beg_str
// и оканчивающуюся на end_str
//------------------------------------------------------------------------------------------------
AnsiString FindMacros(AnsiString line, AnsiString beg_str, AnsiString end_str)
{
AnsiString tmp=line;
int idx=0,idx2=0;
if((idx=tmp.Pos(beg_str)))
{
AnsiString tmp2=tmp.SubString(idx+beg_str.Length(),tmp.Length());
if((idx2=tmp2.Pos(end_str))){
return tmp.SubString(idx,beg_str.Length()+idx2+end_str.Length()-1);
}
}
return "";
}
|